home *** CD-ROM | disk | FTP | other *** search
Wrap
/************************************************************************* * "edi.cci" : テキストエディタ *************************************************************************/ #include "ediofs.h" /* edi から txd を得るマクロ (edi->txd) */ #define EDI_TXDPTR(edi) EdiGetTxdPtr(edi) /* メタキー設定データ */ char *EdiTbl_metakey[26] = { /* A */ "$swave(note,cmd,len,Tn,wn,&,x,sp,ep,sin,amp,ang,spd,amp,sub)", /* B */ "$cho(note,len,n,x,sp,ep)", /* C */ "continue", /* D */ "#define\\t", /* E */ "#endif", /* F */ "fprintf(\x22", /* G */ "fgets(buf,len,fp);", /* H */ ".mmltype\\tfb386\\n.fm\\t\\t\\tfmtone2\\n.pcm\\t\\tensam01\\n", /* I */ "#include\\t", /* J */ "#ifdef\\n#\\tdefine\\tEXT\\n#else\\n#\\tdefine\\tEXT\\textern\\n#endif\\n", /* K */ "iskanji\x28", #if 0 /* L */ "/*\\t:*****************************************************************\\n\\t:\\n\\t:*****************************************************************\\n*/\\n", #else /* L */ "/*************************************************************************\\n*\\n*************************************************************************/\\n", #endif /* M */ "void\\tmain(int argc,char *argv[])\\n{\\t", /* N */ "NORMAL", /* O */ "if ( (fp = fopen(filename,\x22rb\x22))==NULL )\\n", /* P */ "printf(\x22", /* Q */ "exit();", /* R */ "return", /* S */ "$slide(note,cmd,n,&,x,sp,ep)", /* T */ "typedef", /* U */ "unsigned", /* V */ "$vib(note,len,n,sin,sp,a,spd,ang)", /* W */ "$wave(note,cmd,n,&,sin,sp,a,spd,ang)", /* X */ "FALSE", /* Y */ "TRUE", /* Z */ "register" }; /************************************************************************* * テキストエディタ・システムの初期化 *************************************************************************/ int EdiUsr_sysInit() { int i; EdiHistFlag = TRUE; /* 編集履歴有効 */ for ( i = 0; i < 26; ++i ) EdiMetaKeySet( 'A'+i, EdiTbl_metakey[i]); /* 検索パターンの登録 --------------------------------------------*/ TxdSetSearchPattern("NIFTY TITLE", "[0-9]..../[0-9].... ........ .* .*\\|[0-9]../[0-9].. ...[0-9].... .* .*" ); TxdSetSearchPattern("C FUNCTION" , "^[A-Za-z_].*[ \\t]*[a-zA-Z_].*(.*)" ); TxdSetSearchPattern("TITLE" , "^[ \\t]*[★☆●○◎■□◆◇・§]\\|^[ \\t]*[((【《][ 0-90-9]*[))】》]" ); TxdSetSearchPattern("#ifdef~else~endif" , "^#[ \\t]*if\\|^#[ \\t]*else\\|^#[ \\t]*endif" ); return (NORMAL); } int EdiUsr_sysTerm() { return (NORMAL); } /************************************************************************* * 操作ガイドメッセージのオン/オフ *************************************************************************/ int EdiUsr_guideMsg() { int y, x1,y1,x2,y2; x1 = EdiFr[0]; y1 = EdiFr[1]; x2 = EdiFr[2]; y2 = y1 + 14*2 - 1; EdiFr[1] = y2 + 1; DSP_writePage(0); DSP_boxf(x1,y1,x2,y2,PSET,C_MBLACK); y = y1 + 1; DSP_putf12(x1,y,C_HYELLOW,C_MBLACK, " ^Y:行削除 ^T:左削除 ^U:右削除 ^A:1単語戻る ^F:1単語進む ^W:1行上 ^Z:1行下 ^R:1頁上 ^C:1頁下 "); y += 14; DSP_putf12(x1,y,C_HYELLOW,C_MBLACK, " ^B:UNDO ^~B:REDO ^O:TAB・改行表\示切替 ^Q:拡張1 ^K:拡張2 ^P:ポケット ^L:行削除バッファ・ペースト ^J・G:ガイド・オフ"); return (NORMAL); } /************************************************************************* * ウィンドゥがオープンされたときに呼び出される *------------------------------------------------------------------------- * キーカスタマイズ等はここで行うと良い *************************************************************************/ int EdiUsr_openFunc( char *edi ) { char *txd; #ifdef CT # undef CT #endif #define CT KA_BIT_CTRL #ifdef SH # undef SH #endif #define SH KA_BIT_SHIFT txd = EDI_TXDPTR(edi); TXD_cstSetKey( txd, SH|CT|KA_INS , TXD_CALLUSRFNC, 0, "dup_line 行複写"); TXD_cstSetKey( txd, CT|KA_RETURN, TXD_CALLUSRFNC, 0, "template テンプレート"); TXD_cstSetKey( txd, SH|CT|KA_F , TXD_CALLUSRFNC, 0, "getxt_searchPattern 検索パターンの取得"); TXD_cstSetPfxKey( txd, CT|KA_Q , KA_W, TXD_CALLUSRFNC, 0, "word_help キーワード説明"); TXD_cstSetPfxKey( txd, CT|KA_K , KA_W, TXD_CALLUSRFNC, 0, "cut_word 1単語選択"); TXD_cstSetPfxKey( txd, SH|CT|KA_J , KA_U, TXD_CALLUSRFNC, 0, "undo_info UNDO/REDO情報の表\示"); TXD_cstSetPfxKey( txd, SH|CT|KA_J , KA_C, TXD_CALLUSRFNC, 0, "clear_undo_buffer 撤回用バッファの削除"); TXD_cstSetPfxKey( txd, CT|KA_K , SH|KA_R, TXD_CALLUSRFNC, 0, "auto_rect_edit 罫線内の矩形編集"); #if 1 TXD_cstSetPfxKey( txd, CT|KA_Q , KA_W, TXD_CALLUSRFNC, 0, "pg_help プログラム・ヘルパ"); #else TXD_cstSetPfxKey( txd, CT|KA_Q , KA_W, TXD_CALLUSRFNC, 0, "word_help キーワード説明"); #endif TXD_cstSetPfxKey( txd, SH|CT|KA_M , KA_T, TXD_CALLUSRFNC, 0, "mml_toneGen mml generate"); #ifdef _TAROPYON_SYSTEM TXD_cstSetPfxKey( txd, CT|KA_J , KA_1, TXD_CALLUSRFNC, 0, "form_1 C言語ソ\ース編集"); TXD_cstSetPfxKey( txd, CT|KA_J , KA_2, TXD_CALLUSRFNC, 0, "form_2 原稿整理/編集(19)"); #endif #ifdef _ESC_MARK_JUMP TXD_cstSetPfxKey( txd, KA_ESC, 0x0B00, TXD_CALLUSRFNC, 0, "jump_mark_0"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0200, TXD_CALLUSRFNC, 0, "jump_mark_1"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0300, TXD_CALLUSRFNC, 0, "jump_mark_2"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0400, TXD_CALLUSRFNC, 0, "jump_mark_3"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0500, TXD_CALLUSRFNC, 0, "jump_mark_4"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0600, TXD_CALLUSRFNC, 0, "jump_mark_5"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0700, TXD_CALLUSRFNC, 0, "jump_mark_6"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0800, TXD_CALLUSRFNC, 0, "jump_mark_7"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0900, TXD_CALLUSRFNC, 0, "jump_mark_8"); TXD_cstSetPfxKey( txd, KA_ESC, 0x0A00, TXD_CALLUSRFNC, 0, "jump_mark_9"); #endif return (NORMAL); #undef CT #undef SH } /************************************************************************* * セーブして編集を終了するときに呼ばれる *************************************************************************/ int EdiUsr_saveFunc( char *edi, char *fn ) { return (NORMAL); } /************************************************************************* * 編集を終了するときに呼ばれる *************************************************************************/ int EdiUsr_quitFunc( char *edi ) { return (NORMAL); } /************************************************************************* * イベント処理関数 *************************************************************************/ int ediUsr_evtFunc( int evtNo, char *sbj ) { return EDI_cmdJump( GET_EVTSBJ_PTR(sbj), evtNo ); } /************************************************************************* * 新規にファイルオープンしたときに呼び出される *************************************************************************/ int EdiUsr_setPathname( char *edi, char *pn ) { return (NORMAL); } int EDI_menu_1( char *edi, int x, int y ) { int ret; char *mnu; char *obj; char *func; func = "ediUsr_evtFunc"; obj = MNU_alloc(11); #ifndef _MSG_JPN MNU_setObj(obj, 0, MNU_NOR, 'O', "File Open" , NULL, EDICMD_FILEOPEN ,func, edi ); MNU_setObj(obj, 1, MNU_NOR, 'C', "File Close" , NULL, EDICMD_FILECLOSE ,func, edi ); MNU_setObj(obj, 2, MNU_BLK, 0, NULL , NULL, 0, NULL, NULL); MNU_setObj(obj, 3, MNU_NOR, 'W', "Write file" , NULL, EDICMD_FILEWRITE ,func, edi ); MNU_setObj(obj, 4, MNU_NOR, 'R', "Read file" , NULL, EDICMD_FILEREAD ,func, edi ); MNU_setObj(obj, 5, MNU_NOR, 'U', "Update file" , NULL, EDICMD_FILEUPDATE ,func, edi ); MNU_setObj(obj, 6, MNU_NOR, 'F', "Change Filename", NULL, EDICMD_CHANGENAME ,func, edi ); MNU_setObj(obj, 7, MNU_NOR, 'E', "Edit original" , NULL, EDICMD_EDITORIGINAL,func, edi ); MNU_setObj(obj, 8, MNU_BLK, 0, NULL , NULL, 0, NULL, NULL); MNU_setObj(obj, 9, MNU_NOR, 'P', "UPdate all" , NULL, EDICMD_UPDATEALL ,func, edi ); MNU_setObj(obj,10, MNU_NOR, 'N', "New window" , NULL, EDICMD_NEWWINDOW ,func, edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU1 (FILE)" ); #else MNU_setObj(obj, 0, MNU_NOR, 'O', "ファイルを開く", NULL, EDICMD_FILEOPEN ,func, edi ); MNU_setObj(obj, 1, MNU_NOR, 'C', "ファイルを閉じる", NULL, EDICMD_FILECLOSE ,func, edi ); MNU_setObj(obj, 2, MNU_BLK, 0, NULL, NULL, 0, NULL, NULL); MNU_setObj(obj, 3, MNU_NOR, 'W', "編集ファイルの書出", NULL, EDICMD_FILEWRITE ,func, edi ); MNU_setObj(obj, 4, MNU_NOR, 'R', "別ファイルの読込", NULL, EDICMD_FILEREAD ,func, edi ); MNU_setObj(obj, 5, MNU_NOR, 'U', "編集ファイルの更新(保存)", NULL, EDICMD_FILEUPDATE ,func, edi ); MNU_setObj(obj, 6, MNU_NOR, 'F', "ファイル名の変更", NULL, EDICMD_CHANGENAME ,func, edi ); MNU_setObj(obj, 7, MNU_NOR, 'E', "オリジナル・ファイル読込(再編集)", NULL, EDICMD_EDITORIGINAL,func, edi ); MNU_setObj(obj, 8, MNU_BLK, 0, NULL, NULL, 0, NULL, NULL); MNU_setObj(obj, 9, MNU_NOR, 'P', "全編集ファイルを更新(保存)", NULL, EDICMD_UPDATEALL ,func, edi ); MNU_setObj(obj,10, MNU_NOR, 'N', "新しい編集ファイルを開く", NULL, EDICMD_NEWWINDOW ,func, edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー1(ファイル)" ); #endif ret = MNU_start ( mnu ); MNU_close(mnu); MNU_free(obj); return (ret); } /************************************************************************* * 指定行に飛ぶ *************************************************************************/ int edi_evt_jump( int evtNo, char *sbj ) { char *edi; char *txd; char *dlg; int ret, ln; char buf[16]; edi = GET_EVTSBJ_PTR(sbj); dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320, #ifndef _MSG_JPN "Input line number ?" #else "行番号を入力してください。" #endif ); DLG_getsSetTitle( dlg, "JUMP" ); buf[0] = '\0'; ret = DLG_getsStart( dlg, 15, buf ); if ( ret > 0 && (ln = atoi(buf)) > 0 ) { txd = EDI_TXDPTR(edi); TXD_jumpLine( txd, ln - 1 ); } DLG_getsClose(dlg); return (0); } /************************************************************************* * カットバッファを置換検索パターンに *************************************************************************/ int _ediSetRplPtn( int evtNo, char *sbj ) { char *edi; char *txd; char buf[256]; edi = GET_EVTSBJ_PTR(sbj); txd = EDI_TXDPTR(edi); memset( buf, 0, 256); if ( TXD_getCutBuf(txd,buf,256) >= 0 ) TXD_setReplacePtn( txd, buf ); return (evtNo); } /************************************************************************* * カットバッファを置換文字列に *************************************************************************/ int _ediSetRplStr( int evtNo, char *sbj ) { char *edi; /* EDI_T */ char *txd; /* TXD_T */ char buf[256]; edi = GET_EVTSBJ_PTR(sbj); txd = EDI_TXDPTR(edi); memset( buf, 0, 256); if ( TXD_getCutBuf(txd,buf,256) >= 0 ) TXD_setReplaceStr( txd, buf ); return (evtNo); } /************************************************************************* * カットバッファを検索パターンに *************************************************************************/ int _ediSetSearch( int evtNo, char *sbj ) { char *edi; char *txd; int len; char buf[256]; edi = GET_EVTSBJ_PTR(sbj); txd = EDI_TXDPTR(edi); if ( (len = TXD_getCutBuf(txd,buf,256)) >= 0 ) TXD_setSearchPtn( txd, buf, len ); return (evtNo); } /************************************************************************* * [MENU2] *************************************************************************/ int EDI_menu_2( char *edi, int x, int y ) { int ret; char *mnu; /* MNU_T */ char *obj; /* MNUOBJ_T */ obj = MNU_alloc(13); #ifndef _MSG_JPN MNU_setObj(obj, 0, MNU_NOR, 'F', "Find & jump", NULL, TXD_SEARCHALL , NULL, edi ); MNU_setObj(obj, 1, MNU_NOR, 'S', "Search", NULL, EDICMD_SEARCH , NULL, edi ); MNU_setObj(obj, 2, MNU_NOR, 'R', "Replace", NULL, EDICMD_REPLACE , NULL, edi ); MNU_setObj(obj, 3, MNU_NOR, 'A', "Multi replace All", NULL, TXD_MREPLACE , NULL, edi ); MNU_setObj(obj, 4, MNU_NOR, '1', "Set repalce pattern", NULL, 0, "_ediSetRplPtn", edi ); MNU_setObj(obj, 5, MNU_NOR, '2', "Set repalce strings", NULL, 0, "_ediSetRplStr", edi ); MNU_setObj(obj, 6, MNU_NOR, '3', "Set search pattern", NULL, 0, "_ediSetSearch", edi ); MNU_setObj(obj, 7, MNU_BLK, 0, NULL, NULL, 0, NULL, NULL); MNU_setObj(obj, 8, MNU_NOR, 'J', "Jump", NULL, 0, "edi_evt_jump" , edi ); MNU_setObj(obj, 9, MNU_NOR, 'T', "Top of text", NULL, EDICMD_TOPOFTEXT , NULL, edi ); MNU_setObj(obj,10, MNU_NOR, 'B', "Bottom of text", NULL, EDICMD_LASTOFTEXT , NULL, edi ); MNU_setObj(obj,11, MNU_NOR, 'L', "Last touch", NULL, EDICMD_LASTTOUCH , NULL, edi ); MNU_setObj(obj,12, MNU_NOR, 'M', "Mark", NULL, EDICMD_MARK , NULL, edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU2 (EDIT)" ); #else MNU_setObj(obj, 0, MNU_NOR, 'F', "全検索(一覧表示)" , NULL, TXD_SEARCHALL , NULL, edi ); MNU_setObj(obj, 1, MNU_NOR, 'S', "検索" , NULL, EDICMD_SEARCH , NULL, edi ); MNU_setObj(obj, 2, MNU_NOR, 'R', "置換" , NULL, EDICMD_REPLACE , NULL, edi ); MNU_setObj(obj, 3, MNU_NOR, 'A', "複数パターンの一括置換" , NULL, TXD_MREPLACE , NULL, edi ); MNU_setObj(obj, 4, MNU_NOR, '1', "カットバッファを置換検索パターンに転送", NULL, 0, "_ediSetRplPtn", edi ); MNU_setObj(obj, 5, MNU_NOR, '2', "カットバッファを置換文字列に転送" , NULL, 0, "_ediSetRplStr", edi ); MNU_setObj(obj, 6, MNU_NOR, '3', "カットバッファを検索パターンに転送" , NULL, 0, "_ediSetSearch", edi ); MNU_setObj(obj, 7, MNU_BLK, 0, NULL , NULL, 0, NULL, NULL); MNU_setObj(obj, 8, MNU_NOR, 'J', "指定行番号に移動" , NULL, 0, "edi_evt_jump" , edi ); MNU_setObj(obj, 9, MNU_NOR, 'T', "テキストの先頭に移動" , NULL, EDICMD_TOPOFTEXT , NULL, edi ); MNU_setObj(obj,10, MNU_NOR, 'B', "テキストの最後に移動" , NULL, EDICMD_LASTOFTEXT , NULL, edi ); MNU_setObj(obj,11, MNU_NOR, 'L', "最後に変更があった場所に移動" , NULL, EDICMD_LASTTOUCH , NULL, edi ); MNU_setObj(obj,12, MNU_NOR, 'M', "マーク&ジャンプ" , NULL, EDICMD_MARK , NULL, edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー2(編集・移動)" ); #endif ret = MNU_start ( mnu ); MNU_close(mnu); MNU_free(obj); if ( ret > 0 ) return EDI_cmdJump(edi,ret); else return (ret); } /************************************************************************* * [MENU3] *************************************************************************/ int EDI_menu_3( char *edi, int x, int y ) { int ret; char *mnu; /* MNU_T */ char *obj; /* MNUOBJ_T */ char *txd; int md; unsigned u[4]; char undoMsg[80], redoMsg[80]; txd = EDI_TXDPTR(edi); obj = MNU_alloc(12); if ( TXD_getUndoInfo( txd, u ) == NORMAL && u[3] > 0 ) { md = MNU_NOR; #ifndef _MSG_JPN sprintf( undoMsg, "Undo (%4d)", u[3] ); #else sprintf( undoMsg, "撤回 (%4d)", u[3] ); #endif } else { md = MNU_NOR | MNU_IGN; #ifndef _MSG_JPN strcpy( undoMsg, "Undo"); #else strcpy( undoMsg, "撤回"); #endif } MNU_setObj(obj, 0, md, 'U', undoMsg , NULL, TXD_UNDO, NULL, edi ); if ( TXD_getRedoInfo( txd, u ) == NORMAL && u[3] > 0 ) { md = MNU_NOR; #ifndef _MSG_JPN sprintf( redoMsg, "Redo (%4d)", u[3] ); #else sprintf( redoMsg, "撤回の撤回 (%4d)", u[3] ); #endif } else { md = MNU_NOR | MNU_IGN; #ifndef _MSG_JPN strcpy( redoMsg, "Redo"); #else strcpy( redoMsg, "撤回の撤回"); #endif } MNU_setObj(obj, 1, md, 'R', redoMsg, NULL, TXD_REDO, NULL, edi ); MNU_setObj(obj, 2, MNU_BLK, 0, NULL, NULL, 0 , NULL, NULL); #ifndef _MSG_JPN MNU_setObj(obj, 3, MNU_NOR, '1', "Split 1 left/right", NULL, EDICMD_SPLIT_1, NULL, edi ); MNU_setObj(obj, 4, MNU_NOR, '2', "Split 2 up/down", NULL, EDICMD_SPLIT_2, NULL, edi ); MNU_setObj(obj, 5, MNU_BLK, 0, NULL, NULL, 0, NULL, NULL); MNU_setObj(obj, 6, MNU_NOR, 'P', "Print CUT-BUFFER", NULL, EDICMD_PRINTCBUF, NULL, edi ); MNU_setObj(obj, 7, MNU_NOR, 'T', "Text printout", NULL, EDICMD_PRINTOUT , NULL, edi ); MNU_setObj(obj, 8, MNU_BLK, 0, NULL, NULL, 0, NULL, NULL); MNU_setObj(obj, 9, MNU_NOR, 'C', "Calculator", NULL, EDICMD_CALC, NULL, edi ); MNU_setObj(obj,10, MNU_NOR, 'A', "Ascii code list", NULL, EDICMD_ASCIICODE, NULL, edi ); MNU_setObj(obj,11, MNU_NOR, 'K', "Kanji code list", NULL, EDICMD_KANJICODE, NULL, edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU3 (UTILITY)" ); #else MNU_setObj(obj, 3, MNU_NOR, '1', "画面分割(左右)" , NULL, EDICMD_SPLIT_1, NULL, edi ); MNU_setObj(obj, 4, MNU_NOR, '2', "画面分割(上下)" , NULL, EDICMD_SPLIT_2, NULL, edi ); MNU_setObj(obj, 5, MNU_BLK, 0, NULL , NULL, 0, NULL, NULL); MNU_setObj(obj, 6, MNU_NOR, 'P', "カットバッファの内容を表示", NULL, EDICMD_PRINTCBUF, NULL, edi ); MNU_setObj(obj, 7, MNU_NOR, 'T', "印字" , NULL, EDICMD_PRINTOUT , NULL, edi ); MNU_setObj(obj, 8, MNU_BLK, 0, NULL , NULL, 0, NULL, NULL); MNU_setObj(obj, 9, MNU_NOR, 'C', "数式計算" , NULL, EDICMD_CALC, NULL, edi ); MNU_setObj(obj,10, MNU_NOR, 'A', "アスキーコード一覧" , NULL, EDICMD_ASCIICODE, NULL, edi ); MNU_setObj(obj,11, MNU_NOR, 'K', "漢字コード一覧" , NULL, EDICMD_KANJICODE, NULL, edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー3(ユーティリティ)" ); #endif ret = MNU_start ( mnu ); MNU_close(mnu); MNU_free(obj); if ( ret > 0 ) return EDI_cmdJump(edi,ret); else return (ret); } #define EDI_KST_SNAM ".kst" #define EDI_KST_WILD "*.kst" int _ediSaveSetup( int evtNo, char *sbj ) { char *edi; char *txd; char *fdl; int ret; char tmp[128], *fn; edi = GET_EVTSBJ_PTR(sbj); txd = EDI_TXDPTR(edi); if ( (fdl = FDL_open(0)) == NULL ) return (ERR); FDL_set_title( fdl,"SAVE SETUP"); FDL_set_wildcard( fdl, EDI_KST_WILD ); ret = FDL_start(fdl); fn = FDL_get_filename(fdl); if ( ret != NORMAL || strlen(fn) == 0 ) { FDL_close(fdl); return (ERR); } FS_appendSnam( tmp, fn, EDI_KST_SNAM ); EDI_saveKeySetup(edi,tmp); FDL_close(fdl); return (NORMAL); } int _ediLoadSetup( int evtNo, char *sbj ) { char *edi; char *txd; char *fdl; int ret; char tmp[128], *fn; edi = GET_EVTSBJ_PTR(sbj); txd = EDI_TXDPTR(edi); if ( (fdl = FDL_open(0)) == NULL ) return (ERR); FDL_set_title( fdl,"LOAD SETUP"); FDL_set_wildcard( fdl, EDI_KST_WILD ); ret = FDL_start(fdl); fn = FDL_get_filename(fdl); if ( ret != NORMAL || strlen(fn) == 0 ) { FDL_close(fdl); return (ERR); } FS_appendSnam( tmp, fn, EDI_KST_SNAM ); EDI_loadKeySetup(edi,tmp); FDL_close(fdl); return (NORMAL); } int _ediCallCCI( int evtNo, char *sbj ) { char *edi; char *pn; edi = GET_EVTSBJ_PTR(sbj); pn = EdiGet_pn(edi); /* 編集ファイル名の取得 */ cci_call_menu(pn); return (NORMAL); } int _ediCallHE386( int evtNo, char *sbj ) { char *edi; char *pn; edi = GET_EVTSBJ_PTR(sbj); pn = EdiGet_pn(edi); /* 編集ファイル名の取得 */ he386_menu( pn ); return (NORMAL); } int _ediCallGSPLAY( int evtNo, char *sbj ) { AplDtaInit(); /* DTA 領域の設定 */ AplDtaSetStr( "$MainArg", "gsplay -wrdplay H:/USR/SND/JCOMP/jcomp.exp"); AplPclExec( "GSPLAY.EXP", 7 ); /* GSPLAYの起動 */ return (NORMAL); } int _ediCallExpPath( int evtNo, char *sbj ) { CCI_setExpSearchPath(); return (NORMAL); } /************************************************************************* * [MENU4] *************************************************************************/ int EDI_menu_4( char *edi, int x, int y ) { int ret; char *mnu; char *obj; obj = MNU_alloc(10); #ifndef _MSG_JPN MNU_setObj(obj, 0, MNU_NOR, 'A', "Alphabet buffer" , NULL, EDICMD_ALBUF_MENU , NULL, edi ); MNU_setObj(obj, 1, MNU_NOR, 'K', "Key customize" , NULL, EDICMD_KEYCUSTOMIZE , NULL, edi ); MNU_setObj(obj, 2, MNU_NOR, 'S', "Save key setup data", NULL, 0, "_ediSaveSetup" , edi ); MNU_setObj(obj, 3, MNU_NOR, 'L', "Load key setup data", NULL, 0, "_ediLoadSetup" , edi ); MNU_setObj(obj, 4, MNU_BLK, 0 , NULL , NULL, 0, NULL , NULL); MNU_setObj(obj, 5, MNU_NOR, 'C', "CCI" , NULL, 0, "_ediCallCCI" , edi ); MNU_setObj(obj, 6, MNU_NOR, 'M', "MML Compile" , NULL, 0, "_ediCallHE386" , edi ); MNU_setObj(obj, 7, MNU_NOR, 'G', "GSPLAY" , NULL, 0, "_ediCallGSPLAY" , edi ); MNU_setObj(obj, 8, MNU_BLK, 0 , NULL , NULL, 0, NULL , NULL); MNU_setObj(obj, 9, MNU_NOR, 'P', "EXP search path" , NULL, 0, "_ediCallExpPath", edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU4 (OTHER)" ); #else MNU_setObj(obj, 0, MNU_NOR, 'A', "英字バッファ" , NULL, EDICMD_ALBUF_MENU , NULL, edi ); MNU_setObj(obj, 1, MNU_NOR, 'K', "キーカスタマイズ" , NULL, EDICMD_KEYCUSTOMIZE , NULL, edi ); MNU_setObj(obj, 2, MNU_NOR, 'S', "キー・カスタマイズ・データの保存", NULL, 0, "_ediSaveSetup" , edi ); MNU_setObj(obj, 3, MNU_NOR, 'L', "キー・カスタマイズ・データの読込", NULL, 0, "_ediLoadSetup" , edi ); MNU_setObj(obj, 4, MNU_BLK, 0 , NULL , NULL, 0, NULL , NULL); MNU_setObj(obj, 5, MNU_NOR, 'C', "CCI" , NULL, 0, "_ediCallCCI" , edi ); MNU_setObj(obj, 6, MNU_NOR, 'M', "MML コンパイラ" , NULL, 0, "_ediCallHE386" , edi ); MNU_setObj(obj, 7, MNU_NOR, 'G', "GSPLAY" , NULL, 0, "_ediCallGSPLAY" , edi ); MNU_setObj(obj, 8, MNU_BLK, 0 , NULL , NULL, 0, NULL , NULL); MNU_setObj(obj, 9, MNU_NOR, 'P', "EXPプログラム検索パス設定", NULL, 0, "_ediCallExpPath", edi ); mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー4(その他)" ); #endif ret = MNU_start ( mnu ); MNU_close(mnu); MNU_free(obj); if ( ret > 0 ) return EDI_cmdJump(edi,ret); else return (ret); } int EDI_menu_5( char *edi ) { return (ERR); } int EDI_menu_6( char *edi ) { return (ERR); } int EDI_menu_7( char *edi ) { return (ERR); } int EDI_menu_8( char *edi ) { return (ERR); } int _ediSaveColTbl( int evtNo, char *sbj ) /* カラーテーブルの保存 */ { char *edi; char *txd; edi = GET_EVTSBJ_PTR(sbj); txd = EDI_TXDPTR(edi); TxdUsr_saveColTbl( txd ); return (NORMAL); } /************************************************************************* * [SETUP2] *************************************************************************/ int EDI_setup2( char *edi ) { int ret; char *mnu; char *obj; obj = MNU_alloc(2); #ifndef _MSG_JPN MNU_setObj(obj, 0, MNU_NOR, 'C' , "Change color table", NULL, EDICMD_CHGCOLOR , NULL , edi ); MNU_setObj(obj, 1, MNU_NOR, 'S' , "Save color table" , NULL, 0 , "_ediSaveColTbl", edi ); mnu = MNU_open( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER, MNUATT_EXIT, obj, "SETUP2" ); #else MNU_setObj(obj, 0, MNU_NOR, 'C' , "カラーテーブルの変更", NULL, EDICMD_CHGCOLOR , NULL , edi ); MNU_setObj(obj, 1, MNU_NOR, 'S' , "カラーテーブルの保存" , NULL, 0 , "_ediSaveColTbl", edi ); mnu = MNU_open( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER, MNUATT_EXIT, obj, "設定2" ); #endif ret = MNU_start( mnu ); MNU_close(mnu); MNU_free(obj); if ( ret > 0 ) return EDI_cmdJump(edi,ret); else return (ret); } /************************************************************************* * カーソル位置の位置単語をカットバッファに格納 *************************************************************************/ int TxdUsr_cut_word(char *txd ) { if ( TxdGet_selFlag(txd) != 0 ) /* 選択中なら処理しない */ return (0); TXD_cmdJump( txd, TXD_CUTSTART ); TXD_cmdJump( txd, TXD_NEXTWORD ); TXD_cmdJump( txd, TXD_CUTEND ); return (NORMAL); } /************************************************************************* * 行の二重化 *************************************************************************/ int TxdUsr_dup_line( char *txd ) { if ( TxdGet_selFlag(txd) != 0 ) /* 選択中なら処理しない */ return (0); TXD_cmdJump( txd, TXD_TOPOFLINE ); /* カーソルを行頭に */ TXD_cmdJump( txd, TXD_SCBUFSET ); /* 行末まで行カットバッファに格納 */ TXD_cmdJump( txd, TXD_CUR_DOWN ); /* カーソルを下に */ TXD_cmdJump( txd, TXD_SCBUFPASTE); /* 行カットバッファをペースト */ return (NORMAL); } int _txd_printUndoInf( char *dlg, int *ubuf ) { DLG_msgPrintf(dlg," 最大バッファサイズ %8d bytes\r\n", ubuf[0] ); DLG_msgPrintf(dlg," 使用バッファサイズ %8d bytes\r\n", ubuf[1] ); DLG_msgPrintf(dlg," 最大回数 %8d 回\r\n" , ubuf[2] ); DLG_msgPrintf(dlg," 現在有効数 %8d 回" , ubuf[3] ); } /************************************************************************* * UNDO情報の表示 *************************************************************************/ int TxdUsr_undo_info( char *txd ) { char *dlg; int ch, x, y; int u[4]; unsigned ec; DSP_writePage(1); dlg = DLG_msgOpen( DLGPOS_MOS_SET_CENTER,DLGPOS_MOS_SET_CENTER, 8*38,16*10,C_MBLACK,C_DLGBASE,COLMIX(C_HGREEN,C_GRAY), "UNDO/REDO BUFFER INFORMATION"); if ( dlg == NULL ) return (ERR); DLG_msgClear( dlg, -1 ); if ( TXD_getUndoInfo( txd, u ) == NORMAL ) { DLG_msgPuts( dlg,"- UNDO -\r\n" ); _txd_printUndoInf( dlg, u ); if ( TXD_getRedoInfo( txd, u ) == NORMAL ) { DLG_msgPuts( dlg,"\r\n- REDO -\r\n" ); _txd_printUndoInf( dlg, u ); } else { DLG_msgPuts(dlg,"\r\n\n REDO機能は使用されていません。\r\n" ); } } else { DLG_msgPuts(dlg,"\r\n UNDO機能は使用されていません。\r\n" ); } while ( 1 ) { ch = EVT_getkey(&ec); if ( ch != 0xFFFF || EVT_mos_pget(&x,&y) ) break; EVT_idl(); } DLG_msgClose(dlg); EVT_mos_waitBO(); return (NORMAL); } /************************************************************************* * UNDOバッファの初期化 *************************************************************************/ int TxdUsr_clear_undo_buffer( char *txd ) { TXD_undo_freeAll( txd ); return (NORMAL); } #define _TXDBOX_APEX (0) /* 角 */ #define _TXDBOX_VERTICAL (1) /* 縦 */ #define _TXDBOX_HORIZON (2) /* 横 */ int _txd_isRectCha(int ch) { switch ( ch ) { case 0x84A1: case 0x84A4: case 0x84A5: case 0x84A3: case 0x84A2: case 0x84A7: case 0x84A8: case 0x84A6: case 0x84A9: return _TXDBOX_APEX; case 0x84A0: return _TXDBOX_VERTICAL; case 0x849F: return _TXDBOX_HORIZON; case 0x84AC: case 0x84AD: case 0x84AE: case 0x84AF: case 0x84B0: case 0x84B1: case 0x84B2: case 0x84B3: case 0x84B4: return _TXDBOX_APEX; case 0x84AB: return _TXDBOX_VERTICAL; case 0x84AA: return _TXDBOX_HORIZON; case 0x84CC: case 0x84CD: case 0x84CE: case 0x84CF: case 0x84D0: case 0x84D1: case 0x84D2: case 0x84D3: case 0x84D4: return _TXDBOX_APEX; case 0x84CB: return _TXDBOX_VERTICAL; case 0x84CA: return _TXDBOX_HORIZON; default: return (-1); } } /************************************************************************* * 罫線で囲まれている範囲を矩形編集 *************************************************************************/ int TxdUsr_auto_rect_edit( char *txd ) { int saveLnL; int saveOfs; int typ, x, y; int x1, y1, x2, y2; int pos1LnL, pos1Ofs; int pos2LnL, pos2Ofs; /* 現在カーソル位置を保存 */ saveLnL = TxdGet_curPosLnL(txd); saveOfs = TxdGet_curPosOfs(txd); if ( saveLnL == 0 || TxdGet_curLin(txd) == NULL || TxdGet_curX(txd) == 0 ) return (NORMAL); if ( _txd_isRectCha(TXD_getch(txd)) >= 0 ) return (NORMAL); /* 罫線上ならエラー */ /* 左端まで移動 ----------------------------------------------------*/ for(;;) { TXD_cmdJump(txd,TXD_CUR_LEFT); typ = _txd_isRectCha(TXD_getch(txd)); if ( typ == _TXDBOX_VERTICAL ) { /* OK */ x1 = TxdGet_curX(txd); break; } else if ( TxdGet_curX(txd) == 0 ) goto _ERR; } /* 上限まで移動 ----------------------------------------------------*/ for(;;) { TXD_cmdJump(txd,TXD_CUR_UP); x = TxdGet_curX(txd); if ( x != x1 ) goto _ERR; typ = _txd_isRectCha(TXD_getch(txd)); if ( typ == _TXDBOX_APEX ) { /* OK */ y1 = TxdGet_curPosLnD(txd); break; } else if ( typ != _TXDBOX_VERTICAL ) goto _ERR; } pos1LnL = TxdGet_curPosLnL(txd); pos1Ofs = TxdGet_curPosOfs(txd); /* 下限まで移動 ----------------------------------------------------*/ for(;;) { TXD_cmdJump(txd,TXD_CUR_DOWN); x = TxdGet_curX(txd); if ( x != x1 ) goto _ERR; typ = _txd_isRectCha(TXD_getch(txd)); if ( typ == _TXDBOX_APEX ) { /* OK */ y2 = TxdGet_curPosLnD(txd); break; } else if ( typ != _TXDBOX_VERTICAL ) goto _ERR; } /* 右端まで移動 ----------------------------------------------------*/ for(;;) { TXD_cmdJump(txd,TXD_CUR_RIGHT); y = TxdGet_curPosLnD(txd); if ( y != y2 ) goto _ERR; typ = _txd_isRectCha(TXD_getch(txd)); if ( typ == _TXDBOX_APEX ) { /* OK */ x2 = TxdGet_curX(txd); break; } else if ( typ != _TXDBOX_HORIZON ) /* 横線と異なる */ goto _ERR; } if ( x1 >= x2 || y1 >= y2 ) goto _ERR; pos2LnL = TxdGet_curPosLnL(txd); pos2Ofs = TxdGet_curPosOfs(txd); TXD_jumpPos( txd, pos1LnL, pos1Ofs ); TXD_cmdJump(txd,TXD_CUR_RIGHT); TXD_cmdJump(txd,TXD_CUR_DOWN); TXD_cmdJump(txd,TXD_RECTSTART); TXD_jumpPos( txd, pos2LnL, pos2Ofs ); TXD_cmdJump(txd,TXD_CUR_UP); TXD_cmdJump(txd,TXD_RECTEND); return (NORMAL); _ERR: TXD_jumpPos( txd, saveLnL, saveOfs ); return (NORMAL); } #undef _TXDBOX_APEX #undef _TXDBOX_VERTICAL #undef _TXDBOX_HORIZON /************************************************************************* * カーソル位置の単語を検索パターンに設定 *************************************************************************/ int TxdUsr_getxt_searchPattern( char *txd ) { size_t curLnL, curOfs; int ret, ch, len; char ptn[256+4]; /* 現在カーソル位置を取得 */ curLnL = TxdGet_curPosLnL(txd); curOfs = TxdGet_curPosOfs(txd); if ( (ch = TXD_getch(txd)) > 0 ) { len = 0; while( len < 256 ) { ch = TXD_getch(txd); TXD_cmdJump( txd, TXD_CUR_RIGHT ); if ( (ch & 0xFF) < 0x20 ) break; if ( ch < 256 ) { if ( isdigit(ch) || isalpha(ch) || ch == '_' ) ptn[len++] = ch; else break; } else { /* 漢字 */ ptn[len++] = (ch>>8) & 0xFF; ptn[len++] = ch & 0xFF; } } ptn[len] = '\0'; TXD_jumpPos( txd, curLnL, curOfs ); if ( len == 0 ) return (NORMAL); if ( TXD_setSearchPtn( txd, ptn, len ) == NORMAL ) { DSP_writePage(1); DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER, C_MBLACK, C_DLGBASE, COLMIX(C_TIMEBOX,C_GRAY), 2, "Sear search pattern \n %s ", ptn ); } } return (NORMAL); } /************************************************************************* * C言語ソース編集 *************************************************************************/ int TxdUsr_form_1( char *txd ) { char *edi; edi = TxdGet_ptr(txd); EdiSet_marginAdjust(edi,0); TxdSet_linDspFlag(txd,0); /* 行番号OFF */ TxdSet_linDspMode(txd,1); /* 論理行 */ TxdSet_dspTab(txd,1); /* タブコード表示 */ TxdSet_tabSpace(txd,0); /* タブ展開OFF */ TxdSet_dspKS(txd,1); /* 全角スペース表示 */ TxdSet_dspCUL(txd,1); /* カーソル行アンダーラインON */ TxdSet_dspColum(txd,0); /* 桁位置ゲージOFF */ TxdSet_fntX(txd, 6); /* フォント8×16 */ TxdSet_fntY(txd,12); TxdSet_xsL(txd,256); /* 右マージン38 */ TxdSet_tab(txd,4); /* タブサイズ2 */ TXD_chgSize(txd); return (NORMAL); } /************************************************************************* * 原稿モード *************************************************************************/ int TxdUsr_form_2( char *txd ) { char *edi; edi = TxdGet_ptr(txd); EdiSet_marginAdjust(edi,0); TxdSet_linDspFlag(txd,1); /* 行番号ON */ TxdSet_linDspMode(txd,0); /* 表示行 */ TxdSet_dspTab(txd,1); /* タブコード表示 */ TxdSet_tabSpace(txd,1); /* タブ展開 */ TxdSet_dspKS(txd,1); /* 全角スペース表示 */ TxdSet_dspCUL(txd,1); /* カーソル行アンダーラインON */ TxdSet_dspColum(txd,0); /* 桁位置ゲージOFF */ TxdSet_fntX(txd, 8); /* フォント8×16 */ TxdSet_fntY(txd,16); TxdSet_xsL(txd,38); /* 右マージン38 */ TxdSet_tab(txd,2); /* タブサイズ2 */ TXD_chgSize(txd); return (NORMAL); } #ifdef _ESC_MARK_JUMP int TxdUsr_jump_mark_0( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,0);} int TxdUsr_jump_mark_1( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,1);} int TxdUsr_jump_mark_2( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,2);} int TxdUsr_jump_mark_3( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,3);} int TxdUsr_jump_mark_4( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,4);} int TxdUsr_jump_mark_5( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,5);} int TxdUsr_jump_mark_6( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,6);} int TxdUsr_jump_mark_7( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,7);} int TxdUsr_jump_mark_8( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,8);} int TxdUsr_jump_mark_9( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,9);} #endif #include "edimml.c" #include "edipghlp.c" /*#include "ediwhlp.c"*/ #include "editmp.c"